import * as vscode from 'vscode';

// 注册文件装饰提供器
const decorationProvider = new class implements vscode.FileDecorationProvider {
    private _onDidChange = new vscode.EventEmitter<vscode.Uri | vscode.Uri[]>();
    readonly onDidChangeFileDecorations = this._onDidChange.event;

    constructor() {
        // 监听文档保存事件
        vscode.workspace.onDidSaveTextDocument(doc => {
            this._onDidChange.fire(doc.uri);
            // 触发资源管理器刷新
            this._refreshExplorer();
        });

        // 监听文档修改事件
        vscode.workspace.onDidChangeTextDocument(e => {
            this._onDidChange.fire(e.document.uri);
            // 触发资源管理器刷新
            this._refreshExplorer();
        });

        // 监听文档关闭事件
        vscode.workspace.onDidCloseTextDocument(doc => {
            this._onDidChange.fire(doc.uri);
            // 触发资源管理器刷新
            this._refreshExplorer();
        });

        // 监听标签页切换事件
        vscode.window.tabGroups.onDidChangeTabs(tabs => {
            const uris: vscode.Uri[] = [];
            tabs.changed.forEach(tab => {
                if (tab.input instanceof vscode.TabInputText) {
                    uris.push(tab.input.uri);
                }
            });
            if (uris.length > 0) {
                this._onDidChange.fire(uris);
                // 触发资源管理器刷新
                this._refreshExplorer();
            }
        });
    }

    // 帮助函数：刷新资源管理器视图
    private _refreshExplorer() {
        // 通过执行刷新命令强制刷新Explorer视图
        vscode.commands.executeCommand('workbench.files.action.refreshFilesExplorer');
    }

    provideFileDecoration(uri: vscode.Uri): vscode.FileDecoration | undefined {
        // 查找匹配的文档
        const doc = vscode.workspace.textDocuments.find(d => d.uri.toString() === uri.toString());
        if (doc?.isDirty) {
            return {
                badge: '*',                                 // 使用星号作为标记
                color: new vscode.ThemeColor('editorInfo.foreground'), // 使用更醒目的颜色
                tooltip: '未保存的修改',
                propagate: false                           // 不传播到父文件夹
            };
        }
        return undefined;
    }
};

// 激活扩展时注册
export function activate(context: vscode.ExtensionContext) {
    const disposable = vscode.window.registerFileDecorationProvider(decorationProvider);
    context.subscriptions.push(disposable);
}